import matplotlib.pyplot as plt

from random_walk import RandomWalk

# 只要程序处于活动状态，就不断地模拟随机漫步
while True:
    # 创建一个RandomWalk实例
    rw = RandomWalk(50_000)
    rw.fill_walk() # 生成漫步数据

    # 将所有点绘制出来
    plt.style.use('classic')
    fig, ax = plt.subplots(figsize=(15, 9), dpi=128)
    # figsize设置绘图窗口大小，单位为英寸，1英寸=2.54cm
    # matplotlib假定屏幕分辨率为100像素/英寸，如果知道屏幕分辨率，可以手动输入dpi=128
    # DPI（Dots Per Inch，每英寸点数），在图像中，也等同于PPI(Pixels Per Inch，像素/英寸)

    point_numbers = range(rw.num_points) # 创建一个表示颜色深浅梯度的列表，根据点出现的先后决定颜色深浅
    # ax.scatter(rw.x_values, rw.y_values, s=15) # c: color, s: size
    ax.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues,
        edgecolors='none', s=1) # edgecolors点边缘轮廓颜色设置为透明(none)，如果不设置，默认有黑色轮廓

    # 突出起点和终点（通过重新绘制实现）
    ax.scatter(0, 0, c='green', edgecolors='none', s=100) # 起点
    ax.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none', s=100) # 终点

    # 隐藏坐标轴
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)

    plt.show()

    keep_running = input("Make another walk? (y/n): ")
    if keep_running == 'n':
        break